// Jair Cazarin <jair.cazarin@gmail.com>

#include<bitset>
#include<vector>
#include<assert.h>

using namespace std;

#define MAXPRIME 10000000
vector <int> prime_table;
bitset <MAXPRIME> sieve;

void fill_prime_table()
{
   sieve.set();
   for (int i=2; i<MAXPRIME; i++)
     if (sieve.test(i))
     {
       prime_table.push_back( i );
       for (int j=2*i; j<MAXPRIME; j+=i)
         sieve.reset(j);
     }
}

void solve(int n)
{
   assert(n >= 8 && n<=MAXPRIME);
   int fprime = 0;
   int sprime = 0;
   
   if(n & 1)
      n -= 5;
   else
      n -= 4;
   
   for(int i = 0; i < n; i++)
   {
       fprime = prime_table[i];
       if(sieve.test((sprime = n - prime_table[i])))
          break; 
   }
   
   if(n & 1)
      printf("%d %d %d %d", fprime, sprime, 2, 3);
   else
      printf("%d %d %d %d", fprime, sprime, 2, 2);
}

int main()
{
    fill_prime_table();
    int n;
    scanf("%d", &n);
    solve(n);
}
